home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 September / Amiga Games Extra CD-ROM 9-1996.iso / userbox / demoversionen / dcf77 demo v3 beta / für programmierer / dcf77-datenaustausch next >
Text File  |  1996-05-11  |  3KB  |  82 lines

  1.  
  2.                                                             
  3.       DCF77:  Wie man den Status des Empfangsprogramms erfahren kann
  4.       ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  5.  
  6.  
  7.  Damit andere Programme ermitteln können, ob DCF77 die Systemzeit
  8.  erfolgreich eingestellt hat, besitzt das Programm eine Datenstruktur, die
  9.  eine öffentliche SignalSemaphore zur Regelung des Zugriffs enthält.
  10.  
  11.  Zum Zugriff auf die Struktur gelten die Regeln für die Benutzung von
  12.  Public Shared SignalSemaphoren. Es sollte nur lesend zugegriffen werden.
  13.  
  14.  Die Semaphore ist unter dem Namen "DCF77 State" zu finden.
  15.  
  16.  
  17.  struct DCF77StateList
  18.  {
  19.     struct SignalSemaphore sl_Semaphore; // die Semaphore "DCF77 State"
  20.     STRPTR version; // Zeiger auf die Version von DCF77 (z.B. "1.74")
  21.     BOOL Received;  // FALSE: keine DCF77-Zeit | TRUE: Systemzeit gestellt.
  22.  
  23.     // Die nachfolgenden Werte existieren erst ab DCF77 Version 2.18:
  24.     LONG ReceiverState; // 0 - kein Signal. 1 - Empfang gestört.
  25.                         // 2 - Warte auf Synchronisation. 3 - Empfang läuft.
  26.                         // 4 - Programm inaktiv
  27.     LONG TimeLeft;  // voraussichtl. Dauer [s] bis zum nächsten Stellen
  28.                     // der Zeit
  29.     LONG LastError; // noch nicht implementiert (z.Z. immer Null)
  30.  };
  31.  
  32.  
  33.  Als Beispiel zur Benutzung der Struktur finden Sie in diesem Verzeichnis
  34.  die Sourcecodes der Hilfsprogramme WaitForDCF77 und WaitDCF77ifCrash.
  35.  
  36.  Bei der Weiterentwicklung des Programms ist eine Ergänzung der Struktur
  37.  um weitere Angaben möglich.
  38.  
  39.  Genaueres über Semaphoren finden Sie ab Seite 509 in
  40.  
  41.      Amiga ROM Kernel Reference Manual: Libraries, Third Edition
  42.      Addison-Wesley Publishing Company, Inc. 1992
  43.      ISBN 0-201-56774-1
  44.  
  45.  
  46.  Wenn die Versionsnummer von DCF77 abgefragt werden soll, kann das z.B.
  47.  auf folgende Weise geschehen:
  48.  
  49.     struct DCF77StateList *DCF77PublicState;
  50.     UBYTE    *DCF77SemaphoreName="DCF77 State";
  51.     LONG DCFVersion, DCFRevision, Characters;
  52.  
  53.     Forbid();
  54.     if(DCF77PublicState=(struct DCF77StateList *) FindSemaphore(DCF77SemaphoreName))
  55.     {
  56.         ObtainSemaphoreShared((struct SignalSemaphore *) DCF77PublicState);
  57.  
  58.         // Jetzt kann auf die bis Version 2.17 vorhandenen Werte zugegriffen
  59.         // werden...
  60.  
  61.         Characters=StrToLong(DCF77PublicState->Version,&DCFVersion);
  62.         Characters=StrToLong(DCF77PublicState->Version+Characters+1,&DCFRevision);
  63.         if(DCFVersion>2 || DCFVersion==2 && DCFRevision>=18)
  64.         {
  65.             // ...und jetzt auf die ab Version 2.18 vorhandenen Werte.
  66.         }
  67.         ReleaseSemaphore((struct SignalSemaphore *) DCF77PublicState);
  68.     }
  69.     else
  70.     {
  71.         // DCF77 läuft nicht
  72.     }
  73.     Permit();
  74.  
  75.  
  76.  Wie Sie sehen, müssen Zugriffe auf eine Semaphore mit Forbid()/Permit()
  77.  abgesichert werden. Um das Systemverhalten nicht zu beeinträchtigen,
  78.  sollten Sie diesen Vorgang möglichst kurz gestalten; am besten kopieren
  79.  Sie benötigte Werte in Hilfsvariablen und werten sie erst nach dem
  80.  Permit() aus.
  81.  
  82.